# coding: utf-8
# Перед запуском установить Python 2.7
# При первом запуске создастся папка "photos"
# Положить в неё фотки формата JPG, JPEG
# Отредактировать файл настроек "config.txt"
# Запустить заново скрипт .py двойным кликом
# Создаётся новая папка с именем даты, например: "12.01.2012",
# в которой лежат обновлённые файлы, с теми же самыми именами.
# Старые файлы (в папке photos) не изменяются, и не удаляются скриптом. Трите их вручную.
__author__ = 'menangen'

import datetime, os
from random import randrange

config = "config.txt"

def getDiff(start_hour, end_hour, day):
    start_datetime = datetime.datetime.strptime(day + start_hour, "%d.%m.%Y%H:%M")
    end_datetime = datetime.datetime.strptime(day + end_hour, "%d.%m.%Y%H:%M")
    diff_date = end_datetime - start_datetime
    return [diff_date, start_datetime]

def makeRes(start, end, day, number_photos):

    getDiff_var = getDiff(start, end, day)
    timedif = getDiff_var[0]
    interval = timedif / number_photos
    intervals_times = []

    iteratortime = getDiff_var[1]

    for i in range(number_photos):
        random_time = iteratortime + datetime.timedelta(seconds=randrange(0, interval.seconds))
        iteratortime += interval

        random_time_EXIF_formatted = random_time.strftime("%Y:%m:%d %H:%M:%S")
        intervals_times.append(random_time_EXIF_formatted)

    return intervals_times

config_list = []
# чтение файла конфигурации
def getConfiguration():

    if not len(config_list):

        with open(config, 'r') as fileconfig:
            #print fileconfig.read()
            line = fileconfig.read()
            string_list_config = line.splitlines()
            # добавляем елементы в конфиг массива
            for element in string_list_config:
                config_list.append(element.split("=")[1])

    return config_list

def getFiles():
    if os.path.exists("photos"):

        photos_to_convert_list = os.listdir("photos")

        return photos_to_convert_list

    else:
        # make folder /photos
        os.mkdir("photos")
        print "Papka photos sozdana. Polozhite tuda fotki dlya obrabotki"
        # write base config file
        writeConfigFile()
        return False

def filestoConvert():
    files = getFiles()

    if files:
        files_to_convert = []

        if len(files) > 0:

            for element in files:
                # проверка на JPG
                if element.split(".")[1] in ("JPG", "JPEG"):
                    files_to_convert.append(element)
            return files_to_convert
    else:
        print "Papka pustaya!"
        return False

def convert(intervals, files):
    import TBP
    filecount = 0
    name_of_folder = getConfiguration()[2]

    if not os.path.exists(name_of_folder):
        os.mkdir(name_of_folder)

    for fileJPG in files:
        print fileJPG

        # Load the image
        j = TBP.Jpeg('photos/' + fileJPG)

        DateTime = j.getExifTag("DateTime")

        print("Was " + DateTime)


        j.setExifTag("DateTime", intervals[filecount])
        j.setExifTag("DateTimeOriginal", intervals[filecount])
        j.setExifTag("DateTimeDigitized", intervals[filecount])
        print("Make " + intervals[filecount])
        print

        # writing new JPG in the folder such as a sample '12.01.2012'
        j.writeFile(name_of_folder + '/'+ fileJPG)

        filecount += 1

def main():
    processsingFiles = filestoConvert()
    if processsingFiles:
        number_of_files = len(processsingFiles)

        if number_of_files:

            time_config = getConfiguration()
            intervals = makeRes(time_config[0], time_config[1], time_config[2], number_of_files)
            convert(intervals, processsingFiles)
        else:
            print "Net file'ov v papke photos"

def writeConfigFile():
    config_list = ("start=10:00\n", "end=11:30\n", "day=12.01.2012\n")
    config_file = open(config, 'w')
    config_file.writelines(config_list)

    config_file.close()
main()